﻿using System;

namespace _13._复合数据类型___结构
{
    class Program
    {

        static void Main(string[] args)
        {
            var book = new Book();

            book.type = BookType.漫画书;
            book.作者 = "小白";
            book.name = "一本漫画书";
            book.出版日期 = new DateTime(2000, 4, 1); // Date 日期 Time  时间，Now 现在

            Console.WriteLine(@$"类型：{book.type}
书名：{book.name}
作者：{book.作者}
出版日期：{book.出版日期}");

            

            var book2 = new Book();
            Console.WriteLine(@$"类型：{book2.type}
书名：{book2.name}
作者：{book2.作者}
出版日期：{book2.出版日期}");


            // 扩展了 Override ToString ： 方便了调试输出，不用每次都写上面那一段组合拳
            var book3 = new Book();
            var book4 = new Book("我",DateTime.Now, BookType.期刊);
            var book5 = new Book("我", DateTime.Now, BookType.期刊,"HAHA");
            Console.WriteLine(book3);
            Console.WriteLine(book4);
            Console.WriteLine(book5);
        }
    }

    // 结构
    // 关键字： struct 
    // 一个带有基本数据类型、复合数据类型的组合，是一个信息的载体，是值类型，存在于栈中
    // struct 和 class 很像

    struct Book // 书籍
    {
        public BookType type;
        public string name;
        public string 作者;
        public DateTime 出版日期;

        //数据必须被完全初始化
       public Book(string zz,DateTime time,BookType type,string name="AA") 
        {
            this.name = name;
            this.type = type;
            this.作者 = zz;
            this.出版日期 = time;
        }

        public override string ToString()
        {
            return @$"类型：{type}
书名：{name}
作者：{作者}
出版日期：{出版日期}";
        }
    }

    enum BookType
    {
        未定义,
        漫画书,
        文献,
        期刊,
        小说,
        散文,
        经济管理
    }
}
